#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
基于真实Figma设计生成HarmonyOS代码 - 直接调用MCP工具
"""

import json
import os

def load_config():
    with open('scripts/config.json', 'r') as f:
        return json.load(f)

def generate_prompt(page_name, figma_url):
    """生成提示词"""
    prompt = """基于真实Figma设计生成HarmonyOS代码：

链接: {figma_url}
页面: {page_name}

⚠️ 关键要求 - 避免白屏问题:
1. 使用MCP工具获取真实设计数据
2. 下载并验证图片资源
3. 严格遵循ArkTS语法规范

🔧 技术规范 - 必须遵循:
- HarmonyOS 6.0 ArkTS语法
- 避免在build()方法中使用const/let声明
- 避免使用Rectangle组件，改用Row/Column
- 避免复杂的泛型和Array.from操作
- 使用简单的条件判断替代ForEach循环

📦 组件复用策略 - 优先使用现有组件:
- StatusBar: 状态栏显示
- ProgressIndicator: 进度指示器
- ThemedButton: 主题按钮
- DeviceAdapter: 设备适配(可选，简单页面直接用硬编码)
- 查看项目components目录下的现有组件

🎨 样式实现 - Design Token优先:
- ✅ 读取现有的entry/src/main/resources/base/element/color.json
- ✅ 提取Figma设计中的所有颜色值
- ✅ 如果颜色不存在，按Design Token三层架构添加:
  * Core Tokens: 基础颜色值 (core_tokens_orange_600: "#FF6733")
  * Semantic Tokens: 语义映射 (semantic_tokens_primary: "$color:core_tokens_orange_600")  
  * Component Tokens: 组件专用 (component_tokens_button_primary_background: "$color:semantic_tokens_primary")
- ✅ 优先使用$r('app.color.xxx')引用颜色
- ✅ 保持现有颜色资源不变，只添加新颜色
- 如果简单页面，可直接使用硬编码颜色值(如#FF6733)
- 使用基础组件: Column, Row, Text, Image, Button
- 简化布局结构，避免过度嵌套

🖼️ 图片处理 - 必须从Figma获取:
- ✅ 所有图片资源必须从Figma下载，不使用占位符
- ✅ 使用download_design_assets工具下载所有切图
- ✅ 将下载的图片复制到entry/src/main/resources/rawfile/目录
- ✅ 使用$rawfile('图片名.png')引用图片
- 检查下载的切图质量
- 如切图有问题，使用简单几何形状替代
- 图标容器: 44x44px，橙色背景(#FF6733)，圆角
- 确保所有Image组件都有对应的真实图片文件

📐 布局优化 - 防止白屏:
- 状态栏固定44px高度
- 主内容使用layoutWeight(1)
- 底部元素固定位置
- 使用Blank()进行空间分配
- 合理的padding和margin值

🌍 多语言支持 - 支持21种语言:
- ✅ 提取Figma中的所有文本内容
- ✅ 为所有文本创建string.json资源条目
- ✅ 使用$r('app.string.xxx')引用文本，避免硬编码
- ✅ 支持项目现有的21种语言国际化:
  * 英文(base) - 默认语言
  * 中文简体(zh_CN) - 中国大陆
  * 中文繁体台湾(zh_TW) - 中国台湾  
  * 中文繁体香港(zh_HK) - 中国香港
  * 日文(ja) - 日本
  * 韩文(ko) - 韩国
  * 法文(fr) - 法国、加拿大
  * 德文(de) - 德国、奥地利
  * 西班牙文(es) - 西班牙、拉美
  * 阿拉伯文(ar) - 中东、北非
  * 俄文(ru) - 俄罗斯、东欧
  * 葡萄牙文(pt) - 巴西、葡萄牙
  * 意大利文(it) - 意大利
  * 印地语(hi) - 印度
  * 泰语(th) - 泰国
  * 越南语(vi) - 越南
  * 印尼语(id) - 印度尼西亚
  * 马来语(ms) - 马来西亚
  * 荷兰语(nl) - 荷兰、比利时
  * 土耳其语(tr) - 土耳其
  * 波兰语(pl) - 波兰
  * 瑞典语(sv) - 瑞典
- ✅ 更新现有的string.json文件，不覆盖已有条目
- 文本键名使用下划线命名: welcome_title, welcome_description
- 支持换行符: 使用\\n表示换行
- 考虑不同语言文本长度对布局的影响
- 简单的onClick事件处理
- 避免复杂的状态管理
- 使用@State管理简单状态
- 避免箭头函数，使用普通方法

⭐ 代码结构模板:
```typescript
@Entry
@Component
struct {page_name} {{
  @State currentStep: number = 1

  build() {{
    Column() {{
      // 状态栏 - 使用现有StatusBar组件或简单实现
      Row() {{
        Text('9:09').fontSize(15)
        Blank()
        Text('📶🔋').fontSize(12)
      }}
      .width('100%').height(44).padding({{left:24,right:24}})

      // 主内容 - 可滚动
      Column() {{
        // 标题 - 使用多语言资源和Design Token颜色
        Text($r('app.string.page_title'))
          .fontSize(28)
          .fontColor($r('app.color.semantic_tokens_text_title'))
        
        // 描述 - 使用多语言资源和Design Token颜色
        Text($r('app.string.page_description'))
          .fontSize(14)
          .fontColor($r('app.color.semantic_tokens_text_secondary'))
          
        // 按钮 - 使用Design Token颜色
        Button($r('app.string.button_text'))
          .backgroundColor($r('app.color.component_tokens_button_primary_background'))
          .fontColor($r('app.color.component_tokens_button_primary_text'))
      }}
      .layoutWeight(1)

      // 底部指示器
      Row().width(134).height(5).backgroundColor('#C7C7CC')
    }}
    .width('100%').height('100%').backgroundColor('#FFFFFF')
  }}
}}
```

🚨 避免的常见错误:
- 不要在build()中使用const colors = xxx
- 不要使用Rectangle组件
- 不要使用复杂的Array.from和泛型
- 不要使用箭头函数作为组件方法
- 不要过度使用DeviceAdapter(简单页面直接硬编码)

输出文件:
1. {page_name}.ets (完整页面代码)
2. 更新base/element/color.json (Design Token颜色系统)
3. 更新所有21种语言的string.json资源文件:
   - base/element/string.json (英文-默认)
   - zh_CN/element/string.json (中文简体)
   - zh_TW/element/string.json (中文繁体台湾)
   - zh_HK/element/string.json (中文繁体香港)
   - ja/element/string.json (日文)
   - ko/element/string.json (韩文)
   - fr/element/string.json (法文)
   - de/element/string.json (德文)
   - es/element/string.json (西班牙文)
   - ar/element/string.json (阿拉伯文)
   - ru/element/string.json (俄文)
   - pt/element/string.json (葡萄牙文)
   - it/element/string.json (意大利文)
   - hi/element/string.json (印地语)
   - th/element/string.json (泰语)
   - vi/element/string.json (越南语)
   - id/element/string.json (印尼语)
   - ms/element/string.json (马来语)
   - nl/element/string.json (荷兰语)
   - tr/element/string.json (土耳其语)
   - pl/element/string.json (波兰语)
   - sv/element/string.json (瑞典语)
3. 图片资源处理说明
4. Design Token颜色系统更新清单
5. 多语言文本提取和翻译清单""".format(figma_url=figma_url, page_name=page_name)
    return prompt

def main():
    print("🚀 基于真实Figma设计生成HarmonyOS代码")
    print("=" * 60)
    
    config = load_config()
    
    print("📋 读取到的页面:")
    for name, info in config['pages'].items():
        print("  - {}: {}".format(name, info['description']))
    
    print("\n🔄 开始处理 {} 个页面...".format(len(config['pages'])))
    
    for page_name, page_info in config['pages'].items():
        figma_url = page_info['url']
        print("\n📄 处理页面: {}".format(page_name))
        print("🔗 Figma链接: {}".format(figma_url))
        
        # 生成提示词
        prompt = generate_prompt(page_name, figma_url)
        print("\n📋 提示词:")
        print("-" * 40)
        print(prompt)
        print("-" * 40)
        
        print("\n🔧 请在当前会话中手动执行以下MCP工具调用:")
        print("1. show_frameworks")
        print("2. get_figma_data --url='{}' --framework=html --includeImages=true".format(figma_url))
        print("3. download_design_assets --url='{}' --localPath='./assets/{}'".format(figma_url, page_name.lower()))
        print("4. check_reference --assetsPath='./assets/{}'".format(page_name.lower()))
        print("5. 复制所有下载的图片到entry/src/main/resources/rawfile/目录")
        print("6. 提取所有文本内容并创建21种语言的多语言资源")
        print("7. 读取现有颜色资源，按Design Token系统添加新颜色")
        print("8. 基于获取的数据生成 {}.ets 文件".format(page_name))
        
        break  # 只处理第一个页面，避免重复输出
    
    print("\n💡 MCP工具调用指南:")
    print("  - 在当前Q Chat会话中直接调用上述工具")
    print("  - 获取真实Figma设计数据后生成HarmonyOS代码")
    print("  - ⚠️ 重要：必须下载所有图片资源，不使用占位符")
    print("  - 将figma-mcp/assets/目录下的图片复制到rawfile/目录")
    print("  - 🌍 重要：创建21种语言的完整国际化支持")
    print("  - 覆盖全球95%人口的语言需求")
    print("  - 确保图片资源质量，必要时使用几何形状替代")
    print("  - 添加Scroll组件支持内容滚动")
    print("  - 使用精确的Figma颜色值和尺寸")

if __name__ == "__main__":
    main()
